package com.ilongsay.dao;

import com.ilongsay.entity.FaPiao;
import com.ilongsay.entity.Input;
import org.apache.ibatis.annotations.*;


import java.util.List;

/**
 * @Author ilongsay
 * @Email ilongsay@163.com
 * @Copyright 版本所有，侵权必究！
 * @Datetime 2018-11-13 23:01
 * @Describution
 */
public interface BillSqliteDao {
    /**
     * @param
     * @return java.util.List<com.ilongsay.entity.FaPiao>
     * 查询所有的数据进行前端展示
     */
    public List<FaPiao> findBill();

    /**
     * @param
     * @return java.util.List<com.ilongsay.entity.FaPiao>
     * //TODO:日后这里需要再完善一下，不然太麻烦
     * 改成联合查询，查一个主表，将明细表数据也查出来
     */
    //@Select("select * from bill where billCode = #{billCode}")
    public List<FaPiao> findBillByBillCode(@Param("billCode") String billCode);

    /**
     * @param list
     * @return java.lang.Integer
     * 如果以后要提高代码的复用性，这里的Bill设置为T比较好
     * 但是这样则可以让人识别清楚插入的数据是什么
     */
    public Integer insertBill(List<FaPiao> list);

    /**
     * @param list 多张发票的张数
     * @return void
     * 无id插入数据，id需要自己进行设置
     */
    public void insertBillNoId(List<FaPiao> list);

    /**
     * @param
     * @return void
     * 删除所有数据
     */
    @Delete("delete from bill")
    public void deleteAllBill();


    /**
     * @param billCode
     * @return void
     * 按订单编号删除数据，这里只有1一个单号，如果多个的话就得多次事务
     */
    @Delete("delete from bill where billCode = #{billCode}")
    public void deleteBillByBillCode(@Param("billCode") String billCode);

    /**
     * @param faPiao
     * @return void
     * 插入单条数据，效率较低，每执行一次需要新建一个事务
     */
    @Insert("INSERT INTO bill(uid,billCode,customCode,taxNum,customName,addressTel,bankInfo,note,SKR,FHR,billType,saleBank,email,mobPhone,wxham,isCEFP,total,untotal,taxAmount) values (#{uid}, #{billCode},#{customCode},#{taxNum},#{customName},#{addressTel},#{bankInfo},#{note},#{SKR},#{FHR},#{billType},#{saleBank},#{email},#{mobPhone},#{wxham},#{isCEFP},#{total},#{untotal},#{taxAmount})")
    //@Options(useGeneratedKeys = true,keyColumn = "id")
    public void insertBill1(FaPiao faPiao);


    /**
     * @param newBillCode
     * @param oldBillCode
     * @return void
     * 更新订单代码
     */
    @Update("update bill set billCode =#{newBillCode} where billCode = #{oldBillCode}")
    public void updateBill(@Param("newBillCode") String newBillCode,@Param("oldBillCode") String oldBillCode);

    /**
     * @param billCode
	 * @param isRather
     * @return void
     * 更新是否超过限额
     */
    @Update("update bill set isRather=#{isRather} where billCode = #{billCode}")
    public void updateIsRather(@Param("billCode") String billCode, @Param("isRather") String isRather);
    /**
     * @param billCode
	* @param isSix
     * @return void
     * 判断单据是否具有6分钱误差，有就更新数据库。1为有，0为没有
     */
    @Update("update bill set isSix = #{isSix} where billCode = #{billCode}")
    public void updateIsSix(@Param("billCode")String billCode,@Param("isSix")String isSix);

    /**
     * @param
     * @return void
     * 删除sqlite中重复的数据，适合合并后再删除
     */
    public void deleteDistincBill();

    /**
     * @param oldBillCode:是一个string的数据集合
     * @return void
     * 将之前的老的订单号的数据保存在订单主表中
     */
    @Update("update bill set oldbillcode = #{oldBillCode} where billCode = #{billCode}")
    public void addOldBillCode(@Param("oldBillCode") String oldBillCode,@Param("billCode")String billCode);

    //TODO:
    public List<FaPiao> findTheBill(Input input);

    public void deleteBillByParams(@Param("list") List<?> billCode);

    public void deleteBDBill(@Param("list") List<?> billCode);

    /**
     * @param faPiao
     * @return void
     * 更新主表的发票信息，全部更新
     */
    public void updateAll(FaPiao faPiao);
}
